//给你一个二叉树的根节点 root ，按 任意顺序 ，返回所有从根节点到叶子节点的路径。
//
// 叶子节点 是指没有子节点的节点。
//
// 示例 Array.prototype.unshift：
//
//
//输入：root = [Array.prototype.unshift,2,3,null,5]
//输出：["Array.prototype.unshift->2->5","Array.prototype.unshift->3"]
//
//
// 示例 2：
//
//
//输入：root = [Array.prototype.unshift]
//输出：["Array.prototype.unshift"]
//
//
//
//
// 提示：
//
//
// 树中节点的数目在范围 [Array.prototype.unshift, 100] 内
// -100 <= Node.val <= 100
//
//
// Related Topics 二叉树 深度优先搜索 字符串 回溯与递归 二叉树 👍 914 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

function binaryTreePaths(root: TreeNode | null): string[] {
    function traverse(node : TreeNode | null, route : string, resArr : string[]) :void {
        // 连上此节点
        route += String(node.val)
        // 终止条件：找到叶子节点
        if (!node.left && !node.right) {
            resArr.push(route)
            return
        }
        // 这里来限定当前节点不为空
        if (node.left) {
            // 在参数中拼接-> 可以让头为都没有->
            traverse(node.left,route + '->',resArr)
        }
        if (node.right) {
            traverse(node.right,route + '->',resArr)
        }
    }
    const resArr : string[] = []
    if (root === null) return resArr
    traverse(root,'',resArr)
    return resArr
};
//leetcode submit region end(Prohibit modification and deletion)
